package org.ccay.core.util;

import java.io.File;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;

import org.ccay.core.log.CcayLoggerFactory;
import org.ccay.core.log.ILogger;
import org.ccay.core.request.IRequestContext;
import org.ccay.core.request.impl.RequestContext;
import org.ccay.core.util.exception.FileProcessException;

/**
 * 路径辅助工具，用户根据规则获取到/dm下与应用有关的目录路径，包括临时路径。在路径不存在时，相关方法会自动创建路径。
 * 
 * @since 2012-2-9
 */
public final class PathUtil{
	private static final ILogger log = CcayLoggerFactory.getLogger(PathUtil.class);
	/**
	 * 避免创建实例
	 */
	private PathUtil(){
	}
	
	/**
	 * 临时目录位置，包含周期性分隔符 {0} 为服务器名，{1} 为 appName ,{1} 为文件名
	 */
	private static final String PATTERN_LOGS = "/dm/applog/{0}/{1}/logs";
	/**
	 * 无服务器名的日志路径
	 */
	private static final String PATTERN_LOGS_NO_SERVER = "/applog/{0}/logs";
	
	
	/** 
	 * 获取日志文件的路径，会根据RegistryQueryUtil的NoServerInLogPath参数来确定路径中是否包含服务器名
	 * @param type
	 * @return
	 */
	public static String getLogPath(String serverName){
		return getLogPath(serverName, true);			 
	}
	
	/** 
	 * 获取最终文件的路径	
	 * 
	 * @since 2012-8-8
	 * @param serverName
	 * @param includeServerInPath
	 * @return
	 */
	public static String getLogPath(String serverName,boolean includeServerInPath){		
		IRequestContext request = RequestContext.getCurrent();
		
		if(!includeServerInPath){
			return  MessageFormat.format(PATTERN_LOGS_NO_SERVER ,request.getApplication().getAppName());
		}
		return  MessageFormat.format(PATTERN_LOGS, serverName ,request.getApplication().getAppName());		
	}

	/** 	
	 * 创建目录
	 * @param file
	 */
	public static void makeDirs(File file){
		if(file.exists()){
			return;
		}
		if(!file.mkdirs()){
			log.error("Can not create dir:" + file.getPath());
			throw new FileProcessException("ccay.core.00070001",file.getPath());
		}		
	}

	/**
	 * 创建目录
	 * @param filePath 目录路径
	 */
	public static void makeDirs(String filePath) {
		File file = new File(filePath);
		makeDirs(file);
	}
	
}